#include "mainwindow.h"

#include <QApplication>
#include <QDateTime>
#include <QDir>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QTextCodec>

// 自定义消息处理函数，将Qt日志信息保存到文件
void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    // 创建日志目录
    QDir logDir("logs");
    if (!logDir.exists()) {
        logDir.mkpath(".");
    }
    
    // 创建日志文件名（按日期）
    QString logFileName = QString("logs/app_%1.log").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd"));
    QFile logFile(logFileName);
    
    // 打开日志文件（追加模式）
    if (logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
        QTextStream textStream(&logFile);
        // 设置UTF-8编码
        textStream.setCodec("UTF-8");
        
        // 获取当前时间
        QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
        
        // 根据消息类型添加前缀
        QString msgType;
        switch (type) {
            case QtDebugMsg:
                msgType = "Debug";
                break;
            case QtInfoMsg:
                msgType = "Info";
                break;
            case QtWarningMsg:
                msgType = "Warning";
                break;
            case QtCriticalMsg:
                msgType = "Critical";
                break;
            case QtFatalMsg:
                msgType = "Fatal";
                break;
        }
        
        // 格式化日志消息
        QString logMessage = QString("[%1] [%2] %3 (%4:%5, %6)")
                            .arg(currentTime)
                            .arg(msgType)
                            .arg(msg)
                            .arg(context.file ? context.file : "unknown")
                            .arg(context.line)
                            .arg(context.function ? context.function : "unknown");
        
        // 写入日志文件
        textStream << logMessage << Qt::endl;
        
        // 关闭文件
        logFile.close();
    }
    
    // 同时输出到控制台
    fprintf(stderr, "%s\n", qPrintable(msg));
}

int main(int argc, char *argv[])
{
    // 设置应用程序默认编码为UTF-8
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    
    // 安装自定义消息处理函数
    qInstallMessageHandler(customMessageHandler);
    
    // 记录应用程序启动信息
    qDebug() << "应用程序启动";
    
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    int result = a.exec();
    
    // 记录应用程序退出信息
    qDebug() << "应用程序退出，返回码:" << result;
    
    return result;
}
